[Mysql] SELECT ... INTO OUTFILE 'file_name'将查询到的数据写入文件


本文总阅读量

1、生成的文件会在server主机端,因此mysql必须有指定file_name文件所在目录的权限,另外file_name文件必须是不存在的,防止其他数据文件被破坏。

例如:

1
select * from admin into outfile 'd:/admin.xls'

2、使用SELECT … INTO OUTFILE ‘file_name’方式导出数据文件是受参数secure_file_priv控制的,不同值管理着数据是否能正常导出

2.1、secure_file_priv参数值(静态参数,修改必须重启mysql):
1
2
3
如果该值为空,对导出没有限制,这是不安全的设置
如果该值指定了某一个目录,那么导入导出数据操作只能在这个目录下操作,而且指定的目录必须是存在的,mysql服务不能够自动创建。
如果该值为null,那么当前数据库不允许导入导出
2.2、查看参数值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@db 02:48:  [(none)]> show variables like '%secure_file%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+
1 row in set (0.00 sec)
root@db 02:48: [test]> select * from t1;
+----+
| c1 |
+----+
| 1 |
+----+
1 row in set (0.00 sec)

在值为null的时候是不允许导出数据的

1
2
root@db 02:48:  [test]> select * from t1 into outfile '/tmp/t1.xls';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
2.3、修改secure_file_priv的值

在my.cnf配置文件下添加

1
secure_file_priv=''

或者

1
secure_file_priv='/tmp'

并重启数据库,指定的目录必须存在,否则无法启动数据库
不能直接通过set global参数修改,修改会报错:

1
2
root@db 02:49:  [test]> set global secure_file_priv='/data/test';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

重启完之后,查看secure参数:

1
2
3
4
5
6
7
root@db 03:08:  [(none)]> show variables like '%secure_file%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | /tmp/ |
+------------------+-------+
1 row in set (0.02 sec)

3、导出查询数据

1
2
root@db 04:16:  [test]> select * from mysql.user into outfile '/tmp/user.xls';
Query OK, 5 rows affected (0.01 sec)

如果导出的目录不是secure_file_priv指定的目录,报错:

1
2
root@db 00:17:  [test]> select * from t1 into outfile '/data/t1.xls';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
目录
  1. 1. 1、生成的文件会在server主机端,因此mysql必须有指定file_name文件所在目录的权限,另外file_name文件必须是不存在的,防止其他数据文件被破坏。
  2. 2. 2、使用SELECT … INTO OUTFILE ‘file_name’方式导出数据文件是受参数secure_file_priv控制的,不同值管理着数据是否能正常导出
    1. 2.1. 2.1、secure_file_priv参数值(静态参数,修改必须重启mysql):
    2. 2.2. 2.2、查看参数值
    3. 2.3. 2.3、修改secure_file_priv的值
  3. 3. 3、导出查询数据

Proudly powered by Hexo and Theme by Lap
本站访客数人次
© 2020 zeven0707's blog